1. Field of the Invention
The present invention relates to electronic circuits, and more specifically to self-timed circuits that are used as data processing modules.
2. Description of Related Art
Power consumption is now a very important consideration in integrated circuit design. This has compelled circuit designers to consider reducing power consumption through changes in many different levels of the design process, such as the system, technology, algorithm, physical, and circuit levels. For example, system level approaches for reducing power consumption include power supply voltage scaling, clock gating, and subsystem sleep (or power down) modes. Technology level techniques include using dynamic threshold MOSFETs, and algorithm level techniques include using alternate number systems and state encoding. Further, physical level methods include transistor reordering, and circuit level methods include self-timed asynchronous approaches and glitch reduction. The ultra-low power circuits of the future will have to employ several of these approaches because none alone can achieve the power reduction goals for the next decade.
While all of the techniques described above advantageously reduce power consumption, many of them have a deleterious side effect of reducing the speed of the circuit. For example, supply voltage scaling lengthens the system clock period if other factors such as technology and drive strength are kept the same. For this reason, designers now consider the delay-power (DP) product of a circuit as the crucial factor in low power circuit design. One system level design approach that is currently being investigated due to of its potential for significantly reducing the DP product is the One-Hot Residue Number System (OHRNS). For example, the OHRNS is being considered for use in the adaptive FIR (finite impulse response) filters and Viterbi detectors of hard disk drive read channels, in the endecs of wireless telecommunication integrated circuits, and in the adaptive filters of image processing integrated circuits.
The Residue Number System (RNS) is an integer number system in which the basic operations of addition, subtraction, and multiplication can be performed quickly because there are no carries, borrows, or partial products. This allows the basic operations to be performed in a single combinational step, digit-on-digit, using simple arithmetic units operating in parallel. However, other operations such as magnitude comparison, scaling (the RNS equivalent of right shifting), base extension (the RNS equivalent of increasing the bit width), and division are slower and more complicated to implement. Thus, RNS is most widely used in applications in which the basic operations predominate, such as digital signal processing.
The RNS representation of an integer X is a number of digits, with each digit being the residue of X modulo a specially chosen integer modulus. In other words, X is represented as the vector of its residues modulo a fixed set of integer moduli. In order to make the RNS representation of each integer unique for all non-negative values less than the product M of the moduli, the moduli are chosen to be pairwise relatively prime (i.e., the smallest single number into which all divide evenly is equal to the product of the moduli). Letting mi denote the ith modulus, the RNS representation of X is given by X⇄(x1, x2, . . . , xn), where xj=X modulo mi and is known as the ith residue digit of the RNS representation of X. Table 1 shows the representation of the integers 0 to 2430 in an RNS in which m1=11, m2=13, and m3=17 (“an 11, 13, 17 RNS representation”).
TABLE 1IntegerRNS digitRNS digitRNS digitXx11x13x172430 10 12 16 2429 911 15 . . .198621875117640165316 154215 143114 132013 12112 12 11011 11 1010 10 10  9999 8888 7777 6666  5555  4444  3333  2222  1111  0000
As an example, for the natural number 19, the x11 digit is 19 mod(11)=8 (i.e., 19÷13=1 remainder 8), the x13 digit is 19 mod(13)=6, and the x17 digit is 19 mod(17)=2. Each RNS digit is determined without reference to any other RNS digit, and no RNS representation repeats in the range from 0 to 2430. Negative integers can be represented by limiting the represented range to an equal (or substantially equal) number of positive and negative numbers. The representation of the range from −1215 to 1215 in the 11, 13, 17 RNS representation is shown in Table 2. No separate sign is associated with the RNS representation, and the sign of the represented integer cannot be determined from any less than all of its RNS digits.
TABLE 2IntegerRNS digitRNS digitRNS digitXx11x13x171215  56 81214  457. . .44443333222211110000−1  10 12 16 −2  911 15 −3  810 14 −4  7913 . . .−1214    7810 −1215    679
In the RNS, the basic operations of addition, subtraction, and multiplication are performed in digit-parallel fashion, modulo mi. Thus, if operands X and Y have RNS representations of X⇄(x1, x2, . . . , xn) and Y⇄(y1, y2, . . . , yn), the result Z has an RNS representation of Z⇄(x1∘y1, x2∘y2, . . . , xn∘yn), where “xi∘yi” represents any of the basic operations performed on the two RNS digits modulo mi. More specifically, the corresponding RNS digits of the two numbers are added, subtracted, or multiplied, and then the proper modulo operation is performed on each to produce the RNS digits of the result.
For example, in the 11, 13, 17 RNS representation of Table 1, 4+15 gives (4, 4, 4)+(4, 2, 15) or (4+4 mod(11)), 4+2 mod(13), 4+15 mod(17), which equals (8,6,2) or 19. Similarly, 19−15 gives(8−4 mod(11), 6−2 mod(13), 2−15 mod(17)), which equals (4, 4, 4) or 4. Further, 6×3 gives (6×3 mod(11), 6×3 mod(13), 6×3 mod(17)), which equals (7, 5, 1) or 18. Because all individual operations are performed on each RNS digit independently and without reference to any other RNS digit, the operations can be performed completely in parallel. Thus, each of the basic operations can be performed quickly and efficiently, especially when all of the moduli are relatively small integers.
In typical implementations, addition is the fundamental RNS operation and subtraction is performed by adding the additive inverse of the subtrahend. Multiplication is also performed using addition by using the following properties. Any prime modulus p has at least one primitive root, which is an integer α of order p-1 under multiplication. In other words, the primitive root is an integer α whose successive powers, taken modulo p, are the nonzero integers modulo p (i.e., for any 0≦X<p, X=αk modulo p for some 0≦k≦p-2). In such a case, X is said to have an index of k, modulo p.
Given the primitive root, multiplication modulo p can be performed by adding the indices modulo p-1. This is analogous to using logarithms in the binary number system. For example, α=2 is a primitive root modulo 13 because, the integers 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 210, and 211 modulo 13 are equal to 1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10 and 7, respectively. Thus, if X=5 (29 modulo 13) and Y=7 (211 modulo 13), X×Y=35 (28 modulo 13). Thus, the index of the product modulo p (8) of two RNS digits can be determined by adding the indices of the two RNS digits (9 and 11), modulo p-1 (i.e., (9+11) mod(12)=8).
In electronic circuit implementations, the RNS digits can be encoded in various ways. In conventional binary encoding, each RNS digit is converted to a binary number that is represented by the states of one or more lines, each of which is in one of two states to represent a binary digit of “0” or “1”. There is also the “one-hot” encoding scheme in which each possible value of an RNS digit is associated with a separate two-state line. For example, in the 11, 13, 17 RNS representation, 11 lines are used to represent the first RNS digit, 13 lines are used to represent the second RNS digit, and 17 lines are used to represent the third RNS digit. When an RNS digit has a given value, the line associated with that value is high and all of the other lines are low. Thus, only one line of a digit is high (or hot) at any given time.
The use of the one-hot encoding scheme with the RNS produces such compelling advantages in electronic circuit implementations that such a system is identified as the “One-Hot Residue Number System” (OHRNS). While the OHRNS is really the same RNS with the same arithmetic properties, the advantages of using one-hot encoding include basic operation implementation using barrel shifters with their superior delay-power products and operand-independent delays, simple and regular layout of arithmetic circuits, and zero-cost implementation through signal transposition of inverse calculation, index calculation, and residue conversion. When any RNS digit changes in value, at most two lines change state. This is the minimal possible activity factor and yields low power dissipation. Because in OHRNS implementations signal activity factors are near minimal and fewer critical path transistors are present, such systems have very low delay-power products. (A detailed explanation of OHRNS circuits can be found in W. A. Chren, Jr., “One-Hot Residue Coding for Low Delay-Power Product CMOS Design,” IEEE Transactions on Circuits and Systems II: Analog and Digital Signal Processing, v. 45, no. 3 (March 1998), pp. 303-313, which is herein incorporated by reference.)
With one-hot encoding of the RNS digits, addition can be performed through a cyclic shift (i.e., rotation). In particular, one of the operands is rotated by an amount equal to the value of the other operand. While such a rotation can be implemented using several different types of circuits, barrel shifters allow all possible rotations of the first operand to be computed in parallel. The second operand determines which of the rotations is output from the barrel shifter as the result. A conventional OHRNS modulo mi adder is shown in FIG. 1(a). The adder 10 includes a modulo mi barrel shifter 12 that performs the addition, and a static pipeline register 14 that stores the result for downstream processing. FIG. 1(b) shows the internal structure of the barrel shifter. As shown, NMOS pass transistors 16 are used instead of transmission gates to yield higher speed and lower power dissipation due to smaller input and output capacitive loadings (i.e., because there are half as many NMOS sources/drains per input/output line as when transmission gates are used).
Further, in the OHRNS, subtraction can be performed by adding the additive inverse of the subtrahend, and the additive inverse can be computed by a simple one-to-one mapping using signal transposition. FIG. 2 shows a conventional OHRNS modulo mi subtractor. As shown, the subtractor 20 is identical to the adder 10 of FIG. 1(a) except for the use of signal transposition 22 on the subtrahend input to the barrel shifter 12. The signal transposition 22 computes the additive inverse quickly and simply through a one-to-one mapping of inputs to outputs.
Multiplication in the OHRNS can also be performed with barrel shifters by using indices. Indices and their additive inverses, which are known as anti-indices, are the RNS equivalents of logarithms and antilogarithms, as explained above. The computation of indices and anti-indices in any modulus can be performed quickly and simply through a one-to-one mapping. In particular, such mappings in the OHRNS are implemented by merely permutating the signal lines of the RNS digit. In other words, indices and anti-indices can be computed through signal transpositions or wire permutations that require no active circuitry and introduce little or no delay.
FIG. 3 shows a conventional OHRNS modulo mi multiplier that uses wire transpositions to compute indices and anti-indices. More specifically, the multiplier 30 uses signal transpositions 34, 36, and 38 on the input and output lines to compute the indices and anti-indices, and a barrel shifter 32 to add the indices. A small amount of combinational logic 39 is provided to handle the special case in which at least one of the operands is zero. The separate handling of this special case allows the barrel shifter 32 to perform addition modulo mi−1, rather than modulo mi. As in the adder 10 of FIG. 1(a), a static pipeline register 14 stores the resulting product for downstream processing.
Conventional OHRNS circuit designs assemble multiple circuits onto an integrated circuit and these circuits are used in a pipelined architecture with chip-wide clocking for high speed and throughput. These designs typically utilize a single system clock signal (or multiple phased versions of a single clock signal) that is distributed to all circuitry on the chip. Proper operand flows and timing are enforced throughout the chip by pipeline latches driven by this clock signal. These designs have a clock distribution net on the chip that consumes large amounts of power (as much as 15% to 45% of the power consumed by the chip). This is because the clock distribution net is large, has high parasitic capacitance and, in many cases, runs at the full clock frequency. Additional power is consumed in these designs by clocking all pipeline latches every clock period, even though the latch is not required to be clocked if its outputs do not change.
The design of an integrated circuit with a clock distribution net requires extensive care in the laying out the clock net. This design requirement is especially burdensome for large circuits. The clock signal must be delivered to every pipeline stage and the design must maintain the timing integrity of the clock signal, which often operates at the full speed of the circuit. The design of the clock distribution net must also ensure proper sizing of each segment according to the load on that segment because highly loaded segments propagate the clock signal more slowly than segments with smaller loads.
An alternative to synchronous designs is the utilization of self-timed, or asynchronous, circuit modules. A conventional asynchronous system design 400 is illustrated in FIG. 4. This example asynchronous circuit uses multiple circuit modules, or subsystems, which each accept data signals and a Req input. The example system 400 includes multiple subsystems, subsystem A 450a, subsystem B 450b and subsystem N 450c. These multiple subsystems have similar interfaces. As an example, the first subsystem, subsystem A 450a, of the system 400 has an m line data input 402, an m line data output 406, a Req input 404 and an Ack output 408 (“data output ready”). The circuit subsystem toggles the Ack output 408 when the data signal outputs 406 are stable and ready to be accepted for processing by the following subsystem.
The subsystems of this asynchronous system 400 each operate upon transitions of their Req input, such as the Req input 404 of subsystem A 450a. The receiving subsystem (e.g., subsystem B 450b) is notified that the data signal (e.g., data output 406 of subsystem A 450a) is ready by receiving the Ack output of the previous subsystem on its Req line (e.g., the Req input 413 of subsystem B 450b). When the subsystem that has received a data input has completed its processing, the subsystem (e.g., subsystem B 450b) indicates that its data output is stable (latched) and ready for receipt by a following circuit by toggling its Ack output line (e.g., second Ack output 414 of subsystem B 450b). This toggling of the Ack line is also an indication that the subsystem is ready to accept its next data input.
Control of the data flow between subsystems in the system 400 is regulated by control units 410. Each control unit 410 toggles the Req input signal 413 for a subsystem 450b when the preceding subsystem 450a toggles its Ack output signal 408 and the following subsystem (not shown) has its Req input signal toggled (signal 412). This operation results in the toggling of a Req input of a subsystem only when both the upstream Ack and the downstream Req signals are toggled. This ensures that a subsystem does not begin processing input data until: 1) it has finished processing a prior input, 2) the following subsystem is ready to accept that output, and 3) the following subsystem has produced a data output that is ready to be accepted.
The control units 410 used in the example system 400 use Muller C-elements. Muller C-elements can be thought of as AND gates that react to signal transitions. A truth table for a Muller C-element, with two inputs A and B and one output OUT is shown in Table 3.
TABLE 3A B OUT00001Outi−110Outi−1111
The subsystems of the example asynchronous system 400 latch the output data when the Ack output is generated. The circuit designs of subsystems used in conventional asynchronous systems require significant hardware and power to generate the Ack output signal. The processing that generates the Ack signal within these subsystems also adds to the processing delay of the subsystems.